package br.com.ifba.sadd.model {
	
	[Bindable]
	public class ModelLocator
	{
			
		private static var instance:ModelLocator;
		private var _curso:Curso;
		private var _turma:Turma;
		private var _aluno:Aluno;
		private var _perfil:Perfil;
		private var _usuario:Usuario;
		private var _professor:Professor;
		private var _disciplina:Disciplina;
		private var _modalidade:Modalidade;
		private var _usuarioLogado:Usuario;
				
		public function ModelLocator(enforcer:SingletonEnforcer)
		{
			if(enforcer == null){
				throw new Error("Erro ao criar o Facade");
			}			
		}
		
		public static function getInstance():ModelLocator
		{
			if(instance == null)
			{				
				instance= new ModelLocator(new SingletonEnforcer);
			}
			return instance;
		}
		
		/*-------------------------Metodos de acesso as entidades ----------------------------------*/
		 
		public function get curso():Curso
		{
			return _curso;
		}
		
		public function set curso(value:Curso):void
		{
			_curso = value;
		}
		
			
		public function get disciplina():Disciplina
		{
			return _disciplina;
		}
		
		public function set disciplina(value:Disciplina):void
		{
			_disciplina = value;
		}
		
		public function get modalidade():Modalidade
		{
			return _modalidade;
		}
		
		public function set modalidade(value:Modalidade):void
		{
			_modalidade = value;
		}
		
		public function get usuario():Usuario
		{
			return _usuario;
		}
		
		public function set usuario(value:Usuario):void
		{
			_usuario = value;
		}
		
		public function get usuarioLogado():Usuario
		{
			return _usuarioLogado;
		}
		
		public function set usuarioLogado(value:Usuario):void
		{
			_usuarioLogado = value;
		}

		public function get professor():Professor
		{
			return _professor;
		}

		public function set professor(value:Professor):void
		{
			_professor = value;
		}
		
		public function get perfil():Perfil
		{
			return _perfil;
		}
		
		public function set perfil(value:Perfil):void
		{
			_perfil = value;
		}

		public function get turma():Turma
		{
			return _turma;
		}

		public function set turma(value:Turma):void
		{
			_turma = value;
		}

		public function get aluno():Aluno
		{
			return _aluno;
		}

		public function set aluno(value:Aluno):void
		{
			_aluno = value;
		}	
	}
}

/**
 * Bloqueia o acesso ao construtor da classe SaddFacade
 * fazendo com que ela seja instanciada apenas por ela mesma 
 * garantindo assim unicidade do objeto desta classe no sistema
 * */
internal class SingletonEnforcer {}
